/**
 * 泛型 是可以在保证类型安全前提下,让函数等多种类型一起工作,从而实现复用,常用于:函数，接口，class中。
 */

// 需求:创建一个id函数,传入什么数据就返回该数据本身(也就是说,参数和返回值类型相同)
function id(value:number):number {return value}

// 比如:id(10)调用以上函数就会直接返回10本身。但是,该函数只接受数值类型,无法用于其他类型
// 为了让函数能够接受任意类型,可以将参数类型修改为any。但是,这样就失去了ts的类型保护,类型不安全

function id2(value:any):any {return value}


//泛型在保证类型安全的同时,可以让函数等多种不同的类型一起工作,灵活可复用


function id3<Type>(value:Type): Type {return value}

// 1.语法:在函数名称后面加 <>,<>中添加类型变量,比如此处的Type
// 2.类型变量 Type,是一种特殊类型的变量,它处理类型而不是值
// 3.该类型变量相当于一个容器,能够捕获用户提供的类型(具体什么类型由用户调用该函数时指定)
// 4.因为是 Type类型,因此可以将其作为函数参数和返回值的类型,表示参数和返回值时相同的类型
// 5.类型变量Type,可以是任意合法的变量名称



//调用泛型函数
const num = id3<number>(10)
const str = id3<string>('tom')

